package cn.tedu.peipei.base.handler;

import cn.tedu.peipei.base.enums.StatusCode;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import springfox.documentation.spring.web.json.Json;

import javax.swing.plaf.PanelUI;

@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
public class JsonResult {
    /*
    内部状态码（必须有）
    状态码描述（必须有）
    具体数据（可能有也可能没有）
     */
    private Integer code;
    private String msg;
    private Object data;
    /*
    第一个构造方法：无参构造 NoArgsConstructor注解
     */
    /*
    第二个构造方法：全参构造AllArgusConstructor注解
    应用场景：需要返回具体数据的功能
     */
    /*
    第三个构造方法：只有 状态码和描述
    应用场景：用于不需要具体数据的功能
     */
    public JsonResult(Integer code,String msg){
        this.code=code;
        this.msg=msg;
    }
    /*
    第四个构造方法：利用枚举类StatusCode；
    应用场景：应用于没有具体数据返回功能
     */
    public JsonResult(StatusCode statusCode){
        this.code=statusCode.getCode();
        this.msg=statusCode.getMsg();
    }
    /*
    第五个构造方法：StatusCode和具体数据data;
    应用场景：有具体数据返回功能；
     */
    public JsonResult(StatusCode statusCode,Object data){
        this.code=statusCode.getCode();
        this.msg=statusCode.getMsg();
        this.data=data;
    }
    /*
    第六个构造方法：用于静态方法中快速构建JsonResult对象
    应用场景：所有操作成功的功能
     */
    public JsonResult(Object data){
        this.code=StatusCode.SUCCESS.getCode();
        this.msg=StatusCode.SUCCESS.getMsg();;
        this.data=data;
    }
    /*
    定义两个静态方法，用于快速生成JsonResult对象
     */
    public static JsonResult ok(Object data){
        return new JsonResult(data);
    }
    public static JsonResult ok(){
        return ok(null);
    }
}
